package com.kaesar.thread.ShiZhanJavaGaoBingFaSheJi2.chp3;

import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

/**
 * ScheduledExecutorService 示例
 *
 * @Author: chengk
 * @Date: 2021/7/27 8:07 下午
 */
public class ScheduledExecutorServiceDemo {
    public static void main(String[] args) {
        ScheduledExecutorService scheduledExecutorService1 = Executors.newScheduledThreadPool(10);

        // 如果前面的任务没有完成，则调度也不会启动
        // 任务调度的频率是一定的，以上一个任务开始执行时间为起点，在之后的period时间调度下一次任务
        // 如果任务执行时间超过period，则在上一个任务执行完成后立即执行下一次任务
        scheduledExecutorService1.scheduleAtFixedRate(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(8000);
                    System.out.println(System.currentTimeMillis() / 1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, 0, 2, TimeUnit.SECONDS);

        ScheduledExecutorService scheduledExecutorService2 = Executors.newScheduledThreadPool(10);
        // 在上一个任务结束后，再经过delay时间进行任务调度
        scheduledExecutorService2.scheduleWithFixedDelay(new Runnable() {
            @Override
            public void run() {
                try {
                    Thread.sleep(1000);
                    System.out.println("scheduleWithFixedDelay: " + System.currentTimeMillis() / 1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
        }, 0, 2, TimeUnit.SECONDS);
    }

}
